﻿/*
报数序列是一个整数序列，按照其中的整数的顺序进行报数，得到下一个数。其前五项如下：

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"）, 即 21。
21 被读作 "one 2",  "one 1" （"一个二" ,  "一个一") , 即 1211。

给定一个正整数 n（1 ≤ n ≤ 30），输出报数序列的第 n 项。

注意：整数顺序将表示为一个字符串。


示例 1:
输入: 1
输出: "1"

示例 2:
输入: 4
输出: "1211"
*/

#include "AllInc.h"

class Solution {
public:
	string countAndSay(int n) 
	{
		if (n <= 0)
		{
			return "";
		}
		else if (n == 1)
		{
			return "1";
		}
		string cur("1");
		while(--n)
		{
			int len = cur.size();
			string next;
			char c = cur[0];
			int num = 1;
			for (size_t i = 1; i < len; i++)
			{
				if (cur[i] == c)
				{
					num++;
				}
				else
				{
					//切换新的字符
					next += '0' + num;
					next += c;

					c = cur[i];
					num = 1;
				}
			}

			//结尾的字符
			next += '0' + num;
			next += c;

			cur = next;
		}

		return cur;
	}
};

//int main()
//{
//	Solution s;
//	string result = s.countAndSay(5);
//
//	return 0;
//}